#pragma once
/* 主要参考自 linux/arch/arm64/include/asm/barrier.h */
#define cmb()		asm volatile(""	: : : "memory")

#define isb()		asm volatile("isb" : : : "memory")
#define dsb(option)	asm volatile("dsb " #option : : : "memory")
#define dmb(option)	asm volatile("dmb " #option : : : "memory")

#define mb()		dmb(sy)
#define rmb()		dmb(ld)
#define wmb()		dmb(st)

#define mp_mb()		dmb(ish)
#define mp_rmb()	dmb(ishld)
#define mp_wmb()	dmb(ishst)

